/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.reporte.utils;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import javax.faces.application.FacesMessage;
import javax.faces.application.FacesMessage.Severity;
import javax.faces.context.FacesContext;
import org.reporte.propiedades.Propiedades;

/**
 *
 * @author 43579648
 */
public class JsfAyuda {

    private static Properties prop = new Properties();
    
    /** Creates a new instance of JsfAyuda */
    public JsfAyuda() {
    }
    private static void lanzarMensaje(String mensaje, Severity severidad, String id){
        FacesMessage fm = new FacesMessage();
        fm.setSummary(mensaje);
        fm.setSeverity(severidad);
        FacesContext.getCurrentInstance().addMessage(id, fm);
    }
    
    public static void lanzarMensajeInfo(String mensaje){
        lanzarMensaje(mensaje, FacesMessage.SEVERITY_INFO, "info");
    }
    
    public static void lanzarMensajeAdvertencia(String mensaje){
        lanzarMensaje(mensaje, FacesMessage.SEVERITY_WARN, "warning");
    }
    
    public static void lanzarMensajeError(String mensaje){
        lanzarMensaje(mensaje, FacesMessage.SEVERITY_ERROR, null);
    }
    
    
    public static Object getBean(String bean){        
            return currentFacesContext().getApplication().getELResolver().getValue(currentFacesContext().getELContext(), null, bean);
    }
    
    
    public static FacesContext currentFacesContext(){
        return FacesContext.getCurrentInstance();
    }
    
    public boolean isSeverityErrorMesages(){
        return isTypeSeverity(FacesMessage.SEVERITY_ERROR);
    }
    
    public boolean isSeverityWarnMesages(){
        return isTypeSeverity(FacesMessage.SEVERITY_WARN);
    }
    
    public boolean isSeverityInfoMesages(){
        return isTypeSeverity(FacesMessage.SEVERITY_INFO);
    }
    
    public boolean isTypeSeverity(Severity severityIn) {
        FacesMessage.Severity severity = currentFacesContext().getMaximumSeverity();
        return severity == severityIn;
    }
    
    
    public static byte[] getObjectToArrayByte(Serializable object) throws Exception{
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutput out = new ObjectOutputStream(bos);   
        out.writeObject(object);
        byte[] yourBytes = bos.toByteArray(); 

        out.close();
        bos.close();
        return yourBytes;
    }
    
    public Serializable getArrayBytesToObject(byte[] bytes) throws Exception{
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        ObjectInput in = new ObjectInputStream(bis);
        Serializable o = (Serializable) in.readObject();

        bis.close();
        in.close();
        return o;
    }
    
    
    public static String getPropertyValue(String key){
        String valor;
        try{
        ResourceBundle rb = ResourceBundle.getBundle("org.reporte.propiedades.recurso",FacesContext.getCurrentInstance().getViewRoot().getLocale());
        valor =rb.getString(key);
        if(valor ==null){
            System.out.println("Propiedad no encontrada");
        }
        return valor;
        }
        catch(Exception e){
            System.out.println("Se ha encontrado un error al buscar la propiedad: " + key);
            System.out.println("ERROR: "+e.getMessage());
            return null;
        }
    }
    
    public static String getPropertyValue(String key, Locale locale){
        String valor;
        try{
        ResourceBundle rb = ResourceBundle.getBundle("org.reporte.propiedades.recurso",locale);
        valor =rb.getString(key);
        if(valor ==null){
            System.out.println("Propiedad no encontrada");
        }
        return valor;
        }
        catch(Exception e){
            System.out.println("Se ha encontrado un error al buscar la propiedad: " + key);
            System.out.println("ERROR: "+e.getMessage());
            return null;
        }
    }
    
    public static String getPropertyValueFromConfigurationFile(String key){
        InputStream is = null;

        try {
           if(prop.isEmpty()){
              is=Propiedades.obtenterDirectorioPropiedades("configuracion.properties");
              prop.load(is);
               System.out.println("Fichero de Configuracion cargado exitosamente");
            }
            return prop.getProperty(key);
        } catch(Exception e) {
            System.out.println("Se ha encontrado un error al buscar la propiedad: " + key);
            System.out.println("ERROR: "+e.getMessage());
            return null;
        }
    }

    public static String getPropertyValue(String key,String fileProperties){
        String valor;
        try{
        ResourceBundle rb = ResourceBundle.getBundle(fileProperties);
        valor =rb.getString(key);
        if(valor ==null){
            System.out.println("Propiedad no encontrada");
        }
        return valor;
        }
        catch(Exception e){
            System.out.println("Se ha encontrado un error al buscar la propiedad: " + key);
            System.out.println("ERROR: "+e.getMessage());
            return null;
        }
    }
    
  
 
}
